package field

import "gitee.com/yanwc/net/utils"

type (
	Lng    float64
	LngRaw [4]byte
	Lat    float64
	LatRaw [4]byte
)

const (
	LngLatUnit  float64 = 1e-6
	LngLatRatio float64 = 1000000
)

func (lng Lng) Raw() (out LngRaw) {
	v := lng * Lng(LngLatRatio)
	copy(out[:], utils.NumberToBytesWithBigEndian(int32(v)))
	return
}

func (lat Lat) Raw() (out LatRaw) {
	v := lat * Lat(LngLatRatio)
	copy(out[:], utils.NumberToBytesWithBigEndian(int32(v)))
	return
}

func (lng LngRaw) Type() Lng {
	v := utils.BytesToNumber[int32](lng[:])
	return Lng(utils.Decimal(float64(v)*LngLatUnit, 6))
}

func (lat LatRaw) Type() Lat {
	v := utils.BytesToNumber[int32](lat[:])
	return Lat(utils.Decimal(float64(v)*LngLatUnit, 6))
}

func (lng LngRaw) Slice() []byte {
	return lng[:]
}

func (lat LatRaw) Slice() []byte {
	return lat[:]
}
